const { buildMain } = require('./build-main')
const { spawn } =  require('child_process')
const colors = require("colors-console");
const waitOn = require('wait-on')
const path = require("path");

async function build() {
  console.log(colors('yellow','开始构建主进程代码...'))
  await buildMain()
  console.log(colors('yellow','启动渲染进程服务...'))

  // electron-dev electron和react dev server共用一个子进程，导致在electron被关闭的时候dev server还在运行，
  // 所以将electron和dev server分成两个子进程，当接收到任何一个子进程退出就退出另一个子进程
  // const child = spawn(
  //   process.platform === 'win32' ? 'npm.cmd' : 'npm',
  //   ['run', 'electron-dev'],
  //   {
  //     cwd: './'
  //   }
  // )
  //
  // child.stdout.on('data', data => {
  //   console.log(`stdout: ${data}`)
  // })
  //
  // // stderr 获取标准错误输出
  // child.stderr.on('data', data => {
  //   console.error(`stderr: ${data}`)
  // })
  //
  // child.on('close', code => {
  //   console.log(`子进程关闭，退出码: ${code}`)
  // })
  //
  // child.on('exit', code => {
  //   console.log(`子进程退出，退出码: ${code}`)
  // })
  //
  // child.on('error', code => {
  //   console.log(`子进程错误，错误码 ${code}`)
  //   // downLiveServer()
  // })

  const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm'

  const devServer = spawn(npm, ['run', 'start'], {
    cwd: './',
    stdio: 'inherit'
  })
  //
  await waitOn({
    resources: [
      'tcp:3000'
    ]
  })

  const electron = path.join(__dirname, `../node_modules/.bin/${process.platform === 'win32' ? 'electron.cmd' : 'electron'}`)
  const mainJs = path.join(__dirname, '../dist/main.js')

  const electronSpawn = spawn(electron, [`--inspect=5858`, mainJs, 'mode=dev'])

  electronSpawn.on('exit', code => {
    console.log(`electronSpawn子进程退出，退出码: ${code}`)
    devServer.kill()
  })

}

build()

